﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Follow.Utils;
using Follow.Model;
using System.Data.SqlClient;
using System.Transactions;

namespace Follow.DataAccess
{
    public class EquipeFuncionarioDAO
    {
        private SqlDataReader reader = null;
        private SqlConnection conn = null;
        private SqlCommand cmd = null;

        public EquipeFuncionarioDAO()
        {
            conn = ConnectionUtils.getConnection();
        }

        public IList<EquipeFuncionario> findByEquipe(Int32 id)
        {
            IList<EquipeFuncionario> ef = new List<EquipeFuncionario>();
            try
            {
                conn.Open();
                String sqlCommand = @" select ef.idequipefuncionario, ef.funcionario_idfuncionario, ef.equipe_idequipe, ef.gestor,
                                        e.nome, f.nome
                                        from equipefuncionario ef, equipe e, funcionario f
                                        where ef.funcionario_idfuncionario = f.idfuncionario and 
	                                        ef.equipe_idequipe = e.idequipe and ef.equipe_idequipe = @id ";
                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("id", id));



                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    EquipeFuncionario equipefunc = new EquipeFuncionario();
                    equipefunc.IDEquipeFuncionario = reader.GetInt32(0);
                    equipefunc.IDFuncionario = reader.GetInt32(1);
                    equipefunc.IDEquipe = reader.GetInt32(2);
                    equipefunc.Gestor = reader.GetBoolean(3);
                    ef.Add(equipefunc);
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return ef;
        }

        public void insert(EquipeFuncionario ef)
        {
            try
            {
                conn.Open();
                String sqlCommand = @" insert into equipefuncionario 
                                      ([funcionario_idfuncionario], [equipe_idequipe], [gestor]) 
                                      values 
                                      (@idFunc, @idEquipe, @gestor) ";

                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("@idFunc", ef.IDFuncionario));
                cmd.Parameters.Add(new SqlParameter("@idEquipe", ef.IDEquipe));
                cmd.Parameters.Add(new SqlParameter("@gestor", ef.Gestor));
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        public void delete(int id)
        {
            throw new NotImplementedException();
        }

        public void deleteByEquipe(int id)
        {
            throw new NotImplementedException();
        }

        public IList<EquipeFuncionario> findByFuncionario(Int32 id)
        {
            IList<EquipeFuncionario> ef = new List<EquipeFuncionario>();
            try
            {
                conn.Open();
                String sqlCommand = @" select ef.idequipefuncionario, ef.funcionario_idfuncionario, ef.equipe_idequipe, ef.gestor,
                                        e.nome, f.nome
                                        from equipefuncionario ef, equipe e, funcionario f
                                        where ef.funcionario_idfuncionario = f.idfuncionario and 
	                                        ef.equipe_idequipe = e.idequipe and ef.funcionario_idfuncionario = @id ";
                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("id", id));



                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    EquipeFuncionario equipefunc = new EquipeFuncionario();
                    equipefunc.IDEquipeFuncionario = reader.GetInt32(0);
                    equipefunc.IDFuncionario = reader.GetInt32(1);
                    equipefunc.IDEquipe = reader.GetInt32(2);
                    equipefunc.Gestor = reader.GetBoolean(3);
                    ef.Add(equipefunc);
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return ef;
        }


        public EquipeFuncionario findByID(Int32 id)
        {
            EquipeFuncionario ef = null;
            try
            {
                conn.Open();
                String sqlCommand = " select * from equipefuncionario where idequipefuncionario = " + id;
                cmd = new SqlCommand(sqlCommand, conn);
                reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    ef = new EquipeFuncionario();
                    ef.IDEquipeFuncionario = reader.GetInt32(0);
                    ef.IDFuncionario = reader.GetInt32(1);
                    ef.IDEquipe = reader.GetInt32(2);
                    ef.Gestor = reader.GetBoolean(3);
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return ef;
        }

        public EquipeFuncionario findByEquipeAndGestor(Int32 id)
        {
            EquipeFuncionario ef = null;
            try
            {
                conn.Open();
                String sqlCommand = " select * from equipefuncionario where gestor = 'true' and equipe_idequipe = " + id;
                cmd = new SqlCommand(sqlCommand, conn);
                reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    ef = new EquipeFuncionario();
                    ef.IDEquipeFuncionario = reader.GetInt32(0);
                    ef.IDFuncionario = reader.GetInt32(1);
                    ef.IDEquipe = reader.GetInt32(2);
                    ef.Gestor = reader.GetBoolean(3);
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return ef;
        }
    }
}